package br.com.divulgaqui.service;

import java.util.List;

import javax.annotation.PostConstruct;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import org.jboss.logging.Logger;

import br.com.divulgaqui.client.EspecificacaoServiceBeanLocal;
import br.com.divulgaqui.client.EspecificacaoServiceBeanRemote;
import br.com.divulgaqui.client.exception.EntityIgualException;
import br.com.divulgaqui.entity.Especificacao;
import br.com.divulgaqui.persistence.dao.EspecificacaoDAO;
import br.com.divulgaqui.persistence.daoimpl.EspecificacaoDAOImpl;

@Stateless
public class EspecificacaoServiceBean implements EspecificacaoServiceBeanLocal,EspecificacaoServiceBeanRemote {

	@PersistenceContext
	private EntityManager entityManager;
	private EspecificacaoDAO especificacaoDAO;
	private Logger logg = Logger.getLogger(EspecificacaoServiceBean.class);
	
	public EspecificacaoServiceBean() {		
	}
	
	@PostConstruct
    public void init(){    	
    	this.especificacaoDAO = new EspecificacaoDAOImpl(this.entityManager);
    }

	@Override
	public void salvar(Especificacao especificacao) throws EntityIgualException {
		Long id = especificacao.getId() == null ? 0 : especificacao.getId();
		Especificacao espec = this.especificacaoDAO.pesquisarEspecificacaoPorNome(id,especificacao.getCampo());
		if(espec == null){
			this.especificacaoDAO.salvar(especificacao);
		}else{
			logg.warn("Especificação \""+especificacao.getCampo()+"\" já foi cadastrada");
			throw new EntityIgualException();
		}	
	}

	@Override
	public void atualizar(Especificacao especificacao) throws EntityIgualException {
		Long id = especificacao.getId() == null ? 0 : especificacao.getId();
		Especificacao espec = this.especificacaoDAO.pesquisarEspecificacaoPorNome(id,especificacao.getCampo());
		if(espec == null){
			this.especificacaoDAO.atualizar(especificacao);
		}else{
			logg.warn("Especificação \""+especificacao.getCampo()+"\" já foi cadastrada");
			throw new EntityIgualException();
		}	
	}

	@Override
	public List<Especificacao> listar() {		
		return this.especificacaoDAO.listarEspecificacao();
	}

	@Override
	public void excluir(Especificacao especificacao) {
		especificacao = this.especificacaoDAO.getPorId(especificacao.getId());
		this.especificacaoDAO.excluir(especificacao);
	}

	@Override
	public void excluirEspecificacaoModelo(Especificacao especificacao) {
		this.especificacaoDAO.excluirEspecificacaoModelo(especificacao);		
	}	
}
